{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "<table class=\"ee-notebook-buttons\" align=\"left\">\n",
        "    <td><a target=\"_blank\"  href=\"https://github.com/giswqs/earthengine-py-notebooks/tree/master/Datasets/Vectors/global_power_plant_database.ipynb\"><img width=32px src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" /> View source on GitHub</a></td>\n",
        "    <td><a target=\"_blank\"  href=\"https://nbviewer.jupyter.org/github/giswqs/earthengine-py-notebooks/blob/master/Datasets/Vectors/global_power_plant_database.ipynb\"><img width=26px src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Jupyter_logo.svg/883px-Jupyter_logo.svg.png\" />Notebook Viewer</a></td>\n",
        "    <td><a target=\"_blank\"  href=\"https://colab.research.google.com/github/giswqs/earthengine-py-notebooks/blob/master/Datasets/Vectors/global_power_plant_database.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" /> Run in Google Colab</a></td>\n",
        "</table>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Install Earth Engine API and geemap\n",
        "Install the [Earth Engine Python API](https://developers.google.com/earth-engine/python_install) and [geemap](https://geemap.org). The **geemap** Python package is built upon the [ipyleaflet](https://github.com/jupyter-widgets/ipyleaflet) and [folium](https://github.com/python-visualization/folium) packages and implements several methods for interacting with Earth Engine data layers, such as `Map.addLayer()`, `Map.setCenter()`, and `Map.centerObject()`.\n",
        "The following script checks if the geemap package has been installed. If not, it will install geemap, which automatically installs its [dependencies](https://github.com/giswqs/geemap#dependencies), including earthengine-api, folium, and ipyleaflet."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {},
      "source": [
        "# Installs geemap package\n",
        "import subprocess\n",
        "\n",
        "try:\n",
        "    import geemap\n",
        "except ImportError:\n",
        "    print('Installing geemap ...')\n",
        "    subprocess.check_call([\"python\", '-m', 'pip', 'install', 'geemap'])"
      ],
      "outputs": [],
      "execution_count": null
    },
    {
      "cell_type": "code",
      "metadata": {},
      "source": [
        "import ee\n",
        "import geemap"
      ],
      "outputs": [],
      "execution_count": null
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Create an interactive map \n",
        "The default basemap is `Google Maps`. [Additional basemaps](https://github.com/giswqs/geemap/blob/master/geemap/basemaps.py) can be added using the `Map.add_basemap()` function. "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {},
      "source": [
        "Map = geemap.Map(center=[40,-100], zoom=4)\n",
        "Map"
      ],
      "outputs": [],
      "execution_count": null
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Add Earth Engine Python script "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {},
      "source": [
        "# Add Earth Engine dataset\n",
        "# Visualization for WRI/GPPD/power_plants\n",
        "# https:#code.earthengine.google.com/9efbd726e4a8ba9b8b56ba94f1267678\n",
        "\n",
        "table = ee.FeatureCollection(\"WRI/GPPD/power_plants\")\n",
        "\n",
        "# Get a color from a fuel\n",
        "fuelColor = ee.Dictionary({\n",
        "  'Coal': '000000',\n",
        "  'Oil': '593704',\n",
        "  'Gas': 'BC80BD',\n",
        "  'Hydro': '0565A6',\n",
        "  'Nuclear': 'E31A1C',\n",
        "  'Solar': 'FF7F00',\n",
        "  'Waste': '6A3D9A',\n",
        "  'Wind': '5CA2D1',\n",
        "  'Geothermal': 'FDBF6F',\n",
        "  'Biomass': '229A00'\n",
        "})\n",
        "\n",
        "# List of fuels to add to the map\n",
        "fuels = ['Coal', 'Oil', 'Gas', 'Hydro', 'Nuclear', 'Solar', 'Waste',\n",
        "    'Wind', 'Geothermal', 'Biomass']\n",
        "\n",
        "# /**\n",
        "#  * Computes size from capacity and color from fuel type.\n",
        "#  *\n",
        "#  * @param {!ee.Geometry.Point} pt A point\n",
        "#  * @return {!ee.Geometry.Point} Input point with added style dictionary.\n",
        "#  */\n",
        "def addStyle(pt):\n",
        "  size = ee.Number(pt.get('capacitymw')).sqrt().divide(10).add(2)\n",
        "  color = fuelColor.get(pt.get('fuel1'))\n",
        "  return pt.set('styleProperty', ee.Dictionary({'pointSize': size, 'color': color}))\n",
        "\n",
        "\n",
        "# Make a FeatureCollection out of the power plant data table\n",
        "pp = ee.FeatureCollection(table).map(addStyle)\n",
        "# print(pp.first())\n",
        "\n",
        "# /**\n",
        "#  * Adds power plants of a certain fuel type to the map.\n",
        "#  *\n",
        "#  * @param {string} fuel A fuel type\n",
        "#  */\n",
        "def addLayer(fuel):\n",
        "#   print(fuel)\n",
        "  Map.addLayer(pp.filter(ee.Filter.eq('fuel1', fuel)).style({'styleProperty': 'styleProperty', 'neighborhood': 50}), {}, fuel, True, 0.65)\n",
        "\n",
        "\n",
        "# Apply `addLayer` to each record in `fuels`\n",
        "for fuel in fuels:\n",
        "    Map.addLayer(pp.filter(ee.Filter.eq('fuel1', fuel)).style(**{'styleProperty': 'styleProperty', 'neighborhood': 50}), {}, fuel, True, 0.65)\n"
      ],
      "outputs": [],
      "execution_count": null
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Display Earth Engine data layers "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {},
      "source": [
        "Map.addLayerControl() # This line is not needed for ipyleaflet-based Map.\n",
        "Map"
      ],
      "outputs": [],
      "execution_count": null
    }
  ],
  "metadata": {
    "anaconda-cloud": {},
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.6.1"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}